//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#pragma package(smart_init)
//---------------------------------------------------------------------------
#include "CVerifInternet.h"
//---------------------------------------------------------------------------
//                          Constructeur
//---------------------------------------------------------------------------
__fastcall CVerifInternet::CVerifInternet( const bool &bEtat )
{
    try {
        OpenHandle      = NULL;
        ConnectHandle   = NULL;
        RessourceHandle = NULL;
        m_nEtat         = ETAT_INCONNUE;
        m_bEtat         = bEtat;
    }catch ( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);}
}
//---------------------------------------------------------------------------
//                          Destructeur
//---------------------------------------------------------------------------
__fastcall CVerifInternet::~CVerifInternet()
{
    try {
        InternetCloseHandle(RessourceHandle);
        InternetCloseHandle(ConnectHandle);
        InternetCloseHandle(OpenHandle);
    }catch ( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);}
}
//---------------------------------------------------------------------------
//                      Connexion à Internet
//---------------------------------------------------------------------------
bool __fastcall CVerifInternet::ConnexionAuSite( const AnsiString &asSite )
{
    bool bRetour = false;
    TMsgErreur * fMsgErreur = NULL;
    try {
        bool bConnected = false;
        DWORD dwContext = 0;

        //Verifier si le poste est connecté à Internet
        bConnected = InternetCheckConnectionA("http://www.google.fr", FLAG_ICC_FORCE_CONNECTION, NULL );
        if(bConnected) {
            //Session
            OpenHandle = InternetOpen("WebHelp", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0);
            if(OpenHandle != NULL) {
                //Ouverture de la page Web
                ConnectHandle  = InternetOpenUrl(OpenHandle, asSite.c_str(), 0, 0, INTERNET_FLAG_EXISTING_CONNECT, (DWORD_PTR)&dwContext);
                if(ConnectHandle != NULL) {
                    RessourceHandle = HttpOpenRequest(ConnectHandle,"GET","/","HTTP/1.1",NULL,NULL,
				                        INTERNET_FLAG_KEEP_CONNECTION,0);
                    if(GetStatus())
                        bRetour = true;
                }else {
                    m_nEtat = ETAT_NOK;
                    if(!m_bEtat)
                        MessageDlg("La page Internet que vous désirez consulter n'est pas valide.", mtWarning, TMsgDlgButtons() << mbOK, 0);
                }
            }
        }else {
            fMsgErreur = new TMsgErreur((TComponent*)0);
            fMsgErreur->ShowModal();

        }
        
    }catch ( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);
        bRetour = false;}
    if(fMsgErreur) {delete fMsgErreur; fMsgErreur = NULL;}
    return bRetour;
}
//---------------------------------------------------------------------------
//                  Obtenir le status de la page
//---------------------------------------------------------------------------
bool __fastcall CVerifInternet::GetStatus()
{
    bool bRetour = false;
    try {
        DWORD status;
        DWORD statusSize = sizeof(status);

        HttpQueryInfo(ConnectHandle, HTTP_QUERY_FLAG_NUMBER|HTTP_QUERY_STATUS_CODE,
                &status, &statusSize, NULL);
                
        if( status == 200){
            m_nEtat = ETAT_OK;
            bRetour = true;
        }else {
            if( status == 404 ){
                    m_nEtat = ETAT_NOK;
                    if(!m_bEtat) {
                        if (MessageDlg("La page Internet que vous désirez consulter n'est pas valide.\nDésirez-vous toute fois la visualiser ?", mtWarning, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
                            bRetour = true;
                    }else
                        bRetour = true;
            }else {
                m_nEtat = ETAT_ANOMALIE;
                if(!m_bEtat)
                    MessageDlg("La page Internet que vous désirez consulter comporte quelques anomalies.", mtWarning, TMsgDlgButtons() << mbOK, 0);
                bRetour = true;
            }
        }

    } catch(Exception &e)   {
       EIC_DISPLAY_EXCEPTION(e);
       bRetour = false;}
    return bRetour;
}
//---------------------------------------------------------------------------
//              Obtenir le numero de l'état
//---------------------------------------------------------------------------
int  __fastcall CVerifInternet::GetEtat()
{
    return m_nEtat;
}
//---------------------------------------------------------------------------
